package com.such.kit.database.bean;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import com.such.kit.validate.ValidateCommons;

/**
 * @author SUCH
 * <pre>
 * jdbc 查询参数包
 * jdbc 查询参数包用于对 jdbc 查询参数的再保证，可以生成更丰富的条件组合
 * </pre>
 */
public class JdbcQueryPackage implements Serializable {

	/** GROUP_PACKAGE_DEFAULT：默认的包名 */
	public static final String GROUP_PACKAGE_DEFAULT = "default";

	private static final long serialVersionUID = 4017707074082131252L;

	/**
	 * packageName 包名 [默认为 default]
	 * <pre>
	 * 同组条件间使用 and 连接
	 * 不同组条件间使用 or 连接
	 * </pre>
	 */
	private String packageName = GROUP_PACKAGE_DEFAULT;
	/** packages：包集 */
	private List<JdbcQueryPackage> packages;
	/** params：参数集 */
	private List<JdbcQueryParam> params;

	public JdbcQueryPackage() {
	}

	/**
	 * @param packageName [参考 {@link #packageName}]
	 */
	public JdbcQueryPackage(String packageName) {
		this.packageName = packageName;
	}

	/** [参考 {@link #packageName}] */
	public String getPackageName() {
		return this.packageName;
	}

	/** [参考 {@link #packageName}] */
	public void setPackageName(String packageName) {
		this.packageName = packageName;
	}

	/** [参考 {@link #packages}] */
	public List<JdbcQueryPackage> getPackages() {
		return this.packages;
	}

	/** [参考 {@link #packages}] */
	public JdbcQueryPackage setPackages(List<JdbcQueryPackage> packages) {
		this.packages = packages;
		return this;
	}

	/**
	 * <pre>
	 * 添加参数包
	 * </pre>
	 * @param pazkage 参数包
	 * @return 返回当前参数包（链式处理）
	 */
	public JdbcQueryPackage addPackages(JdbcQueryPackage pazkage) {
		if (ValidateCommons.isEmpty(this.packages)) {
			this.packages = new ArrayList<JdbcQueryPackage>();
		}
		this.packages.add(pazkage);
		return this;
	}

	/** [参考 {@link #params}] */
	public List<JdbcQueryParam> getParams() {
		return this.params;
	}

	/** [参考 {@link #params}] */
	public JdbcQueryPackage setParams(List<JdbcQueryParam> params) {
		this.params = params;
		return this;
	}

	/**
	 * <pre>
	 * 添加参数
	 * </pre>
	 * @param param 参数
	 * @return 返回当前参数包（链式处理）
	 */
	public JdbcQueryPackage addParam(JdbcQueryParam param) {
		if (ValidateCommons.isEmpty(this.params)) {
			this.params = new ArrayList<JdbcQueryParam>();
		}
		this.params.add(param);
		return this;
	}

	/**
	 * <pre>
	 * [参考 {@link JdbcQueryParam#JdbcQueryParam(String, String)}]
	 * </pre>
	 * @return 返回当前参数包（链式处理）
	 */
	public JdbcQueryPackage addParam(String field, String value) {
		return addParam(new JdbcQueryParam(field, value));
	}

	/**
	 * <pre>
	 * 基于 {@link #addParam(String, String)} 的快速构建
	 * </pre>
	 * @param param 参数集
	 * @return 返回当前参数包（链式处理）
	 */
	public JdbcQueryPackage addParam(Map<String, String> param) {
		if (ValidateCommons.isNotEmpty(param)) {
			for (String field : param.keySet()) {
				String value = param.get(field);
				addParam(field, value);
			}
		}
		return this;
	}

	/**
	 * <pre>
	 * [参考 {@link JdbcQueryParam#JdbcQueryParam(String, String, String)}]
	 * </pre>
	 * @return 返回当前参数包（链式处理）
	 */
	public JdbcQueryPackage addParam(String field, String operator, String value) {
		return addParam(new JdbcQueryParam(field, operator, value));
	}

	/**
	 * <pre>
	 * [参考 {@link JdbcQueryParam#JdbcQueryParam(String, String, String, String)}]
	 * </pre>
	 * @return 返回当前参数包（链式处理）
	 */
	public JdbcQueryPackage addParam(String field, String operator, String value, String groupName) {
		return addParam(new JdbcQueryParam(field, operator, value, groupName));
	}

	/**
	 * <pre>
	 * [参考 {@link JdbcQueryParam#JdbcQueryParam(String, String, String, String, String)}]
	 * </pre>
	 * @return 返回当前参数包（链式处理）
	 */
	public JdbcQueryPackage addParam(String field, String operator, String value, String bindMode, String groupName) {
		return addParam(new JdbcQueryParam(field, operator, value, bindMode, groupName));
	}

}
